Flat, three-dimensional shell elements with six degrees of freedom per node.
Each element is formulated in a local, planar coordinate system by superposing a membrane (plane-stress) element, a plate-bending element, and a drilling-rotation stabilization term. The resulting local matrices are then transformed into the global coordinate system.
The nodal degrees of freedom are ordered as where the rotations follow the right-hand rule about each axis. The element displacement vector stacks the nodal vectors in local node order.
Local Coordinate System
The local -axis is the unit normal of the element plane computed from the node ordering (right-hand rule). The local -axis is the projection of the vector from node 1 to node 2 onto the element plane, and the local -axis completes the right-handed system. Nodes are assumed to lie in a common plane; warped quadrilaterals are projected onto their mean plane.
Kinematics
Within the local system, the displacement through the thickness is and . The generalized strain vector is with
The corresponding stress-resultant vector is where are membrane forces per unit length, are moments per unit length, and are transverse shear forces per unit length.
Drilling Rotation
The in-plane rotation is not part of classical shell theory. It is stabilized with the Hughes-Brezzi penalty which vanishes for rigid-body motion and prevents a singular stiffness matrix for co-planar meshes. The factor is the element's drilling_factor.
Mass Matrix
The consistent mass matrix is computed from the linear (triangle) or bilinear (quadrilateral) interpolation of all six nodal quantities with translational inertia and rotary inertia . The rotary inertia is also assigned to the drilling rotation to keep the mass matrix positive definite.
Constructs a new [[rectangular_shell_element]].
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(material), | intent(in) | :: | mat |
The material. |
||
| real(kind=real64), | intent(in) | :: | thickness |
The shell thickness. This value must be positive. |
||
| class(node), | intent(in) | :: | nd1 |
The first node. |
||
| class(node), | intent(in) | :: | nd2 |
The second node. |
||
| class(node), | intent(in) | :: | nd3 |
The third node. |
||
| class(node), | intent(in) | :: | nd4 |
The fourth node. |
The new [[rectangular_shell_element]].
Constructs a new [[triangular_shell_element]].
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(material), | intent(in) | :: | mat |
The material. |
||
| real(kind=real64), | intent(in) | :: | thickness |
The shell thickness. This value must be positive. |
||
| class(node), | intent(in) | :: | nd1 |
The first node. |
||
| class(node), | intent(in) | :: | nd2 |
The second node. |
||
| class(node), | intent(in) | :: | nd3 |
The third node. |
The new [[triangular_shell_element]].
Defines a four-node flat shell element.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=real64), | public | :: | drilling_factor | = | 1.0d-3 |
The nondimensional drilling-rotation penalty factor . The drilling stiffness is , where is the shear modulus. |
|
| type(material), | public | :: | material |
The material. |
|||
| type(node), | public, | dimension(4) | :: | nodes |
The element nodes. |
||
| real(kind=real64), | public | :: | shear_correction | = | 5.0d0/6.0d0 |
The transverse shear correction factor. This value is only used by elements that include transverse shear deformation. |
|
| real(kind=real64), | public | :: | thickness |
The shell thickness. |
| private pure function quad_init (mat, thickness, nd1, nd2, nd3, nd4) | Constructs a new [[rectangular_shell_element]]. |
| procedure , public :: area => shl_area Function | |
| procedure , public :: constitutive_matrix => shl_constitutive_matrix Function | |
| procedure , public :: evaluate_shape_function => quad_shape_function Function | |
| procedure , public :: external_force_vector => shl_ext_force_vector Function | |
| procedure , public :: get_dimensionality => shl_dimensionality Function | |
| procedure , public :: get_dof_per_node => shl_dof_per_node Function | |
| procedure , public :: get_node => quad_get_node Function | |
| procedure , public :: get_node_count => quad_get_node_count Function | |
| procedure , public :: get_node_natural_coordinates => quad_get_node_natural_coordinates Function | |
| procedure , public :: integration_rule => quad_integration_rule Subroutine | |
| procedure , public :: jacobian => shl_jacobian Function | |
| procedure , public :: local_coordinates => shl_local_coordinates Function | |
| procedure , public :: local_frame => shl_local_frame Function | |
| procedure , public :: mass_matrix => shl_mass_matrix Function | |
| procedure , public :: rotation_matrix => shl_rotation_matrix Function | |
| procedure , public :: shape_function_gradient => shl_shape_function_gradient Function | |
| procedure , public :: shape_function_matrix => shl_shape_function_matrix Function | |
| procedure , public :: shape_function_natural_gradient => quad_shape_function_natural_gradient Function | |
| procedure , public :: stiffness_matrix => shl_stiffness_matrix Function | |
| procedure , public :: strain => shl_strain Function | |
| procedure , public :: strain_displacement_matrix => quad_strain_disp_matrix Function | |
| procedure , public :: stress => shl_stress Function |
Defines a flat shell element with six degrees of freedom per node (three translations and three rotations).
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=real64), | public | :: | drilling_factor | = | 1.0d-3 |
The nondimensional drilling-rotation penalty factor . The drilling stiffness is , where is the shear modulus. |
|
| type(material), | public | :: | material |
The material. |
|||
| real(kind=real64), | public | :: | shear_correction | = | 5.0d0/6.0d0 |
The transverse shear correction factor. This value is only used by elements that include transverse shear deformation. |
|
| real(kind=real64), | public | :: | thickness |
The shell thickness. |
| procedure , public :: area => shl_area Function | |
| procedure , public :: constitutive_matrix => shl_constitutive_matrix Function | |
| procedure (element_shape_function) , public , pass :: evaluate_shape_function | |
| procedure , public :: external_force_vector => shl_ext_force_vector Function | |
| procedure , public :: get_dimensionality => shl_dimensionality Function | |
| procedure , public :: get_dof_per_node => shl_dof_per_node Function | |
| procedure (element_get_node) , public , pass :: get_node | |
| procedure (element_query) , public , pass :: get_node_count | |
| procedure (element_get_node_natural_coordinates) , public , pass :: get_node_natural_coordinates | |
| procedure (shell_integration_rule) , public , pass :: integration_rule | |
| procedure , public :: jacobian => shl_jacobian Function | |
| procedure , public :: local_coordinates => shl_local_coordinates Function | |
| procedure , public :: local_frame => shl_local_frame Function | |
| procedure , public :: mass_matrix => shl_mass_matrix Function | |
| procedure , public :: rotation_matrix => shl_rotation_matrix Function | |
| procedure , public :: shape_function_gradient => shl_shape_function_gradient Function | |
| procedure , public :: shape_function_matrix => shl_shape_function_matrix Function | |
| procedure (shell_natural_gradient) , public , pass :: shape_function_natural_gradient | |
| procedure , public :: stiffness_matrix => shl_stiffness_matrix Function | |
| procedure , public :: strain => shl_strain Function | |
| procedure (element_matrix_function) , public , pass :: strain_displacement_matrix | |
| procedure , public :: stress => shl_stress Function |
Defines a three-node flat shell element.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=real64), | public | :: | drilling_factor | = | 1.0d-3 |
The nondimensional drilling-rotation penalty factor . The drilling stiffness is , where is the shear modulus. |
|
| type(material), | public | :: | material |
The material. |
|||
| type(node), | public, | dimension(3) | :: | nodes |
The element nodes. |
||
| real(kind=real64), | public | :: | shear_correction | = | 5.0d0/6.0d0 |
The transverse shear correction factor. This value is only used by elements that include transverse shear deformation. |
|
| real(kind=real64), | public | :: | thickness |
The shell thickness. |
| private pure function tri_init (mat, thickness, nd1, nd2, nd3) | Constructs a new [[triangular_shell_element]]. |
| procedure , public :: area => shl_area Function | |
| procedure , public :: constitutive_matrix => shl_constitutive_matrix Function | |
| procedure , public :: evaluate_shape_function => tri_shape_function Function | |
| procedure , public :: external_force_vector => shl_ext_force_vector Function | |
| procedure , public :: get_dimensionality => shl_dimensionality Function | |
| procedure , public :: get_dof_per_node => shl_dof_per_node Function | |
| procedure , public :: get_node => tri_get_node Function | |
| procedure , public :: get_node_count => tri_get_node_count Function | |
| procedure , public :: get_node_natural_coordinates => tri_get_node_natural_coordinates Function | |
| procedure , public :: integration_rule => tri_integration_rule Subroutine | |
| procedure , public :: jacobian => shl_jacobian Function | |
| procedure , public :: local_coordinates => shl_local_coordinates Function | |
| procedure , public :: local_frame => shl_local_frame Function | |
| procedure , public :: mass_matrix => shl_mass_matrix Function | |
| procedure , public :: rotation_matrix => shl_rotation_matrix Function | |
| procedure , public :: shape_function_gradient => shl_shape_function_gradient Function | |
| procedure , public :: shape_function_matrix => shl_shape_function_matrix Function | |
| procedure , public :: shape_function_natural_gradient => tri_shape_function_natural_gradient Function | |
| procedure , public :: stiffness_matrix => shl_stiffness_matrix Function | |
| procedure , public :: strain => shl_strain Function | |
| procedure , public :: strain_displacement_matrix => tri_strain_disp_matrix Function | |
| procedure , public :: stress => shl_stress Function |